package cn.bonoon.kernel.annotations;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * <pre>
 * 过滤关键词，关键词的定义有三种情况：
 * 1.通过注解直接指定；这种方式在定义类的时候就已经固定，运行过程没法修改
 * 2.通过指定配置文件；这种方式是通过配置文件来指定关键词，可以在重启系统的时候生效
 * 3.通过指定数据库表；这种是即时动态的
 * 
 * 以上定义可以同时指定多个或全部指定，都会被执行检查的
 * </pre>
 * @author jackson
 *
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface Keyword {
	
	/**
	 * 直接指定不允许使用的关键词
	 * @return
	 */
	String[] value() default {};
	
	/**
	 * 指定不允许使用的关键词来自于某一个实体的某一个字段{@link #property()}
	 * @return
	 */
	Class<?> entityClass() default Object.class;
	
	/**
	 * 与{@link #entityClass()}联合使用，指定关键词的来源
	 * @return
	 */
	String property() default "";
	
	/**
	 * <pre>
	 * 关键词在属性文件里进行定义，如：global.properties文件里
	 * 在属性文件里定义如：keys=aaa,bbb,ccc
	 * 则当前的注解应该这样赋值：{@link Keyword @Keyword(config = "keys")}
	 * </pre>
	 * @return
	 */
	String config() default "";
}
